import { postData } from '@/utils/request';
import store from '@/utils/store';
import { useModel } from '@umijs/max';
import { useCallback } from 'react';

/**
 * 自定义Hook用于管理用户状态
 */
export const useUserState = () => {
  const { setInitialState, initialState } = useModel('@@initialState');

  /**
   * 更新用户信息
   */
  const updateUserInfo = useCallback(
    async (userInfo: any) => {
      try {
        // 只更新全局状态，不存储到本地
        await setInitialState((s: any) => ({
          ...s,
          currentUser: userInfo,
        }));

        return true;
      } catch (error) {
        console.error('更新用户信息失败:', error);
        return false;
      }
    },
    [setInitialState],
  );

  /**
   * 清除用户信息
   */
  const clearUserInfo = useCallback(async () => {
    try {
      // 只清除token，用户信息在全局状态中
      store.removeLocal('token');

      // 清除全局状态
      await setInitialState((s: any) => ({
        ...s,
        currentUser: undefined,
      }));

      return true;
    } catch (error) {
      console.error('清除用户信息失败:', error);
      return false;
    }
  }, [setInitialState]);

  /**
   * 刷新用户信息
   */
  const refreshUserInfo = useCallback(async () => {
    try {
      const token = store.getLocal('token');
      if (!token) return false;

      // 调用API获取最新的用户信息
      const res = await postData('/auth/userInfo', { token });
      if (res.code === 200) {
        return await updateUserInfo(res.data);
      }

      return false;
    } catch (error) {
      console.error('刷新用户信息失败:', error);
      return false;
    }
  }, [updateUserInfo]);

  return {
    currentUser: initialState?.currentUser,
    updateUserInfo,
    clearUserInfo,
    refreshUserInfo,
  };
};
